2015-03-08 146 views
1

当我编译并运行我的程序时,我希望能够重新调整它的大小并保持具有相同比例因子的组件。这意味着当框架展开时,组件也会展开,从而保持原始尺寸和间距尺度。Swing组件的自动调整大小

import javax.swing.*; 
import java.awt.*; 
import java.io.*; 
import java.lang.*; 

public class ResizeTst 
{ 
JFrame myMainWindow = new JFrame("This is my title"); 

JPanel firstPanel = new JPanel(); 

//Components 
JButton CompAth = new JButton(); 
JButton ViewAth = new JButton(); 
JButton UpdateRD = new JButton(); 
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
String []fontFamilies = ge.getAvailableFontFamilyNames(); 
Font FontT5 = new Font("SansSerif", Font.BOLD, 50); 
/////////// 

public void runGUI() 
{ 
    myMainWindow.setBounds(10, 10, 1296, 756); 
    myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    myMainWindow.setLayout(new GridLayout(1,1)); 

    createFirstPanel(); 

    myMainWindow.getContentPane().add(firstPanel); 

    myMainWindow.setVisible(true); 
} 

public void createFirstPanel() 
{ 
    firstPanel.setLayout(null); 

    CompAth.setLocation(500,250); 
    CompAth.setSize(320,300); 
    CompAth.setText("<html><CENTER>Compare<br>Athletes</CENTER></html>"); 
    CompAth.setFont(FontT5); 
    firstPanel.add(CompAth); 

    ViewAth.setLocation(100,250); 
    ViewAth.setSize(320,300); 
    ViewAth.setText("<html><CENTER>View<br>Athletes</CENTER></html>"); 
    ViewAth.setFont(FontT5); 
    firstPanel.add(ViewAth); 

    UpdateRD.setLocation(900,250); 
    UpdateRD.setSize(320,300); 
    UpdateRD.setText("<html><CENTER>Update<br>Running<br>Details</CENTER></html>"); 
    UpdateRD.setFont(FontT5); 
    firstPanel.add(UpdateRD); 
} 

public static void main(String[] args) 
{ 
    ResizeTst rt = new ResizeTst(); 
    rt.runGUI(); 
} 
} 

所以,如果我实现了这个代码,它可以让我在自动全尺寸的任何系统上运行,而不比例因子改变了原先的原先的组件的大小。允许我的程序在全屏幕的大屏幕或小屏幕上看起来很糟糕时运行。

import javax.swing.*; 
import java.awt.*; 
import java.io.*; 
import java.lang.*; 

public class ResizeTst 
{ 
JFrame myMainWindow = new JFrame("This is my title"); 

JPanel firstPanel = new JPanel(); 

//Components 
JButton CompAth = new JButton(); 
JButton ViewAth = new JButton(); 
JButton UpdateRD = new JButton(); 
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
String []fontFamilies = ge.getAvailableFontFamilyNames(); 
Font FontT5 = new Font("SansSerif", Font.BOLD, 50); 
/////////// 
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 

public void runGUI() 
{ 
    myMainWindow.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    myMainWindow.setSize(screenSize); 
    myMainWindow.setVisible(true);  
    myMainWindow.setResizable(true); 
    myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    myMainWindow.setLayout(new GridLayout(1,1)); 

    createFirstPanel(); 

    myMainWindow.getContentPane().add(firstPanel); 

    myMainWindow.setVisible(true); 
} 

有人告诉我,我应该这样可以让我做这件事的面板上使用的布局,但我不知道它的布局使用以及如何将其正确运用这一计划的。任何解决方案或建议如何做到这一点将不胜感激。

+1

1)请学习常见的Java命名(命名约定 - 例如'EachWordUpperCaseClass','firstWordLowerCaseMethod()','firstWordLowerCaseAttribute'除非它是一个'UPPER_CASE_CONSTANT')和一致地使用它。 2)以最小尺寸提供ASCII艺术或简单的GUI布局图,并且如果可调整大小,则具有更大的宽度和高度。 3)我们应该关注哪两个同名的类? 4)'new Font(“SansSerif”,Font.BOLD,50);'用于编译时检查,使用'new Font(Font.SANS_SERIF,Font.BOLD,50);' – 2015-03-08 18:00:11

+0

1)我将在Java中使用它将来的命名。 2)我有,但它不会让我添加图像,直到我有10个声望。 3)它们是相同的类,但第二个具有新的全局变量,并且编辑了runGUI()方法以显示代码,该代码是用于自动进入全屏的新代码。 4)好的 – Dan 2015-03-08 18:08:49

+0

1)我平时对此的回复是*“不用担心,我可能**将来会看到这个问题**”*现在做的时间是***!*** 2)您不能嵌入图像,但将其上传到图像共享网站并链接到它们。您始终可以创建ASCII艺术。 3)我不明白为什么包括在内,我用了第一堂课。 – 2015-03-08 18:15:21

回答

1

从这些行开始。它使用一个GridLayout,这将扩展组件的大小。使用setMargin(Insets)使按钮变大一些。屏幕截图缩小了字体大小,调整了所有需要的数字。

enter image description here

import javax.swing.*; 
import java.awt.*; 
import javax.swing.border.EmptyBorder; 

public class ResizeTst { 

    JFrame myMainWindow = new JFrame("This is my title"); 
    JPanel firstPanel = new JPanel(); 

//Components 
    JButton compAth = new JButton(); 
    JButton viewAth = new JButton(); 
    JButton updateRD = new JButton(); 
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    String[] fontFamilies = ge.getAvailableFontFamilyNames(); 
    Font fontT5 = new Font(Font.SANS_SERIF, Font.BOLD, 25); 
/////////// 

    public void runGUI() { 
     myMainWindow.setBounds(10, 10, 1296, 756); // don't guess the size (1) 
     myMainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     myMainWindow.setLayout(new GridLayout(1, 1)); 
     createFirstPanel(); 
     myMainWindow.getContentPane().add(firstPanel); 
     myMainWindow.pack(); // 1) Make it mininum size needed 
     myMainWindow.setMinimumSize(myMainWindow.getSize()); 
     myMainWindow.setVisible(true); 
    } 

    public void createFirstPanel() { 
     //firstPanel.setLayout(null); 
     firstPanel.setLayout(new GridLayout(1,0,50,50)); 
     firstPanel.setBorder(new EmptyBorder(50,50,50,50)); 
     Insets buttonMargin = new Insets(20, 20, 20, 20); 

     compAth.setText("<html><CENTER>Compare<br>Athletes</CENTER></html>"); 
     compAth.setMargin(buttonMargin); 
     compAth.setFont(fontT5); 
     firstPanel.add(compAth); 

     viewAth.setMargin(buttonMargin); 
     viewAth.setText("<html><CENTER>View<br>Athletes</CENTER></html>"); 
     viewAth.setFont(fontT5); 
     firstPanel.add(viewAth); 

     updateRD.setMargin(buttonMargin); 
     updateRD.setText("<html><CENTER>Update<br>Running<br>Details</CENTER></html>"); 
     updateRD.setFont(fontT5); 
     firstPanel.add(updateRD); 
    } 

    public static void main(String[] args) { 
     // should be on the EDT! 
     ResizeTst rt = new ResizeTst(); 
     rt.runGUI(); 
    } 
}