如何设置某些特定 JButton 组件(在本例中为 btnPlus)的尺寸?
How can I set the dimension of some particular JButton component (in this case btnPlus)?
我尝试使用 setSize() 但没有用。然后我还使用了 setPreferredSize(new Dimension(x,y))。是的,它确实有效,但它会更改该 (oPanel) 面板中所有组件的大小。我只想改变 btnPlus 的大小。
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MyCalc {
public static void main(String[] args) {
JFrame main= new JFrame();
JPanel bPanel= new JPanel();
JPanel oPanel= new JPanel();
JPanel Txt= new JPanel();
JPanel Panel=new JPanel();
JButton btn0= new JButton("0");
JButton btn1= new JButton("1");
JButton btn2= new JButton("2");
JButton btn3= new JButton("3");
JButton btn4= new JButton("4");
JButton btn5= new JButton("5");
JButton btn6= new JButton("6");
JButton btn7= new JButton("7");
JButton btn8= new JButton("8");
JButton btn9= new JButton("9");
JButton btnDot= new JButton(".");
JButton btnPlus= new JButton("+");
JButton btnMinus= new JButton("-");
JButton btnEquals= new JButton("=");
//JTextField tf= new JTextField();
JTextArea ta= new JTextArea();
ta.setColumns(20);
ta.setRows(3);
//ta.setViewPortView()
main.setLayout(new BorderLayout(20,20));
Txt.setLayout(new BorderLayout());
//Txt.add(tf,BorderLayout.NORTH);
Txt.add(ta,BorderLayout.SOUTH);
bPanel.setLayout(new GridLayout(4,3,5,5));
bPanel.add(btn0);
bPanel.add(btn1);
bPanel.add(btn2);
bPanel.add(btn3);
bPanel.add(btn4);
bPanel.add(btn5);
bPanel.add(btn6);
bPanel.add(btn7);
bPanel.add(btn8);
bPanel.add(btn9);
bPanel.add(btnDot);
oPanel.setLayout(new GridLayout(3,1,5,5));
//oPanel.setMaximumSize(new Dimension(400,400));
oPanel.add(btnPlus);
oPanel.add(btnMinus);
oPanel.add(btnEquals);
btnPlus.setPreferredSize(new Dimension(50,100));
btnMinus.setPreferredSize(new Dimension(25,25));
btnPlus.setPreferredSize(new Dimension(50,100));
Panel.setLayout(new FlowLayout());
Panel.add(bPanel);
Panel.add(oPanel);
//main.getContentPane().add(bPanel,BorderLayout.LINE_START);
//main.getContentPane().add(oPanel, BorderLayout.LINE_END);
main.getContentPane().add(Panel,BorderLayout.CENTER);
main.getContentPane().add(Txt, BorderLayout.PAGE_START);
main.setSize(300, 300);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setVisible(true);
}
}
我认为您的主要问题在于 GridLayout
的使用,它根据您提供的配置和容器的大小为容器中的所有组件提供相等的 space。
请考虑使用 GridBagLayout
,这会给您更多的控制权。
有关详细信息,请参阅 How to Use GridLayout and How to Use GridBagLayout。
你也应该看看 Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? 是的,你应该避免它
我尝试使用 setSize() 但没有用。然后我还使用了 setPreferredSize(new Dimension(x,y))。是的,它确实有效,但它会更改该 (oPanel) 面板中所有组件的大小。我只想改变 btnPlus 的大小。
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class MyCalc {
public static void main(String[] args) {
JFrame main= new JFrame();
JPanel bPanel= new JPanel();
JPanel oPanel= new JPanel();
JPanel Txt= new JPanel();
JPanel Panel=new JPanel();
JButton btn0= new JButton("0");
JButton btn1= new JButton("1");
JButton btn2= new JButton("2");
JButton btn3= new JButton("3");
JButton btn4= new JButton("4");
JButton btn5= new JButton("5");
JButton btn6= new JButton("6");
JButton btn7= new JButton("7");
JButton btn8= new JButton("8");
JButton btn9= new JButton("9");
JButton btnDot= new JButton(".");
JButton btnPlus= new JButton("+");
JButton btnMinus= new JButton("-");
JButton btnEquals= new JButton("=");
//JTextField tf= new JTextField();
JTextArea ta= new JTextArea();
ta.setColumns(20);
ta.setRows(3);
//ta.setViewPortView()
main.setLayout(new BorderLayout(20,20));
Txt.setLayout(new BorderLayout());
//Txt.add(tf,BorderLayout.NORTH);
Txt.add(ta,BorderLayout.SOUTH);
bPanel.setLayout(new GridLayout(4,3,5,5));
bPanel.add(btn0);
bPanel.add(btn1);
bPanel.add(btn2);
bPanel.add(btn3);
bPanel.add(btn4);
bPanel.add(btn5);
bPanel.add(btn6);
bPanel.add(btn7);
bPanel.add(btn8);
bPanel.add(btn9);
bPanel.add(btnDot);
oPanel.setLayout(new GridLayout(3,1,5,5));
//oPanel.setMaximumSize(new Dimension(400,400));
oPanel.add(btnPlus);
oPanel.add(btnMinus);
oPanel.add(btnEquals);
btnPlus.setPreferredSize(new Dimension(50,100));
btnMinus.setPreferredSize(new Dimension(25,25));
btnPlus.setPreferredSize(new Dimension(50,100));
Panel.setLayout(new FlowLayout());
Panel.add(bPanel);
Panel.add(oPanel);
//main.getContentPane().add(bPanel,BorderLayout.LINE_START);
//main.getContentPane().add(oPanel, BorderLayout.LINE_END);
main.getContentPane().add(Panel,BorderLayout.CENTER);
main.getContentPane().add(Txt, BorderLayout.PAGE_START);
main.setSize(300, 300);
main.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
main.setVisible(true);
}
}
我认为您的主要问题在于 GridLayout
的使用,它根据您提供的配置和容器的大小为容器中的所有组件提供相等的 space。
请考虑使用 GridBagLayout
,这会给您更多的控制权。
有关详细信息,请参阅 How to Use GridLayout and How to Use GridBagLayout。
你也应该看看 Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing? 是的,你应该避免它