我对 Swing 有点陌生,我正在尝试如何使用空布局放置组件。这是一个程序,其中按钮 b3(接近末尾)一半位于面板 pan1 内,一半是不可见的。
我添加了一个滚动窗格来取pan1,滚动窗格似乎在那里,但它不滚动。有没有办法滚动以便我可以查看完整的按钮?
我不想更改其他组件的绝对位置(空布局)。我只想滚动以使按钮 b3 完全可见。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Swing18
{
public static void main()
{
JFrame frame1 = new JFrame("TESTING");
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(1000,700);
frame1.setLocation(200,100);
frame1.setResizable(false);
frame1.setLayout(null);
JPanel pan1 = new JPanel();
pan1.setBackground(Color.green);
pan1.setBounds(0,0,900,600);
frame1.add(pan1);
pan1.setLayout(null);
JButton east = new JButton("East");
JButton west = new JButton("West");
JButton north = new JButton("North");
JButton south = new JButton("South");
Color cr1 = new Color(0,127,0);
Font ft1 =new Font("impact",Font.BOLD,25);
north.setForeground(Color.white);
north.setBackground(cr1);
south.setForeground(Color.white);
south.setBackground(cr1);
east.setForeground(Color.white);
east.setBackground(Color.blue);
east.setFont(ft1);
east.setToolTipText(" This is the EAST zone");
west.setForeground(Color.white);
west.setBackground(Color.blue);
west.setFont(ft1);
west.setToolTipText(" This is the WEST zone");
JLabel lb1 = new JLabel(" Label 1 ");
JLabel lb2 = new JLabel(" Label 2 ");
lb2.setOpaque(true);
lb2.setForeground(Color.white);
lb2.setBackground(Color.black);
lb2.setFont(ft1);
JTextField tf1 =new JTextField(" TextField1");
tf1.setForeground(Color.white);
tf1.setBackground(Color.black);
tf1.setFont(ft1);
JTextField tf2 =new JTextField("TextField 2");
JTextArea ta1= new JTextArea("Enter TA",5,30);
ta1.setForeground(Color.white);
ta1.setBackground(Color.black);
ta1.setFont(ft1);
ta1.setLineWrap(true);
JSlider sd1 = new JSlider(50,150);
sd1.setMajorTickSpacing(20);
sd1.setMinorTickSpacing(10);
sd1.setPaintTicks(true);//essential for visible ticks
sd1.setPaintLabels(true);//essential for visible numbers
sd1.setForeground(Color.white);
sd1.setBackground(Color.black);
JSlider sd2 = new JSlider(JSlider.VERTICAL,50,200,100);
sd2.setMajorTickSpacing(25);
sd2.setMinorTickSpacing(5);
sd2.setPaintTicks(true);
sd2.setPaintLabels(true);
JSlider sd3 = new JSlider(JSlider.HORIZONTAL,50,200,100);
sd3.setMajorTickSpacing(25);
sd3.setMinorTickSpacing(5);
String[] fruit = {"Apple","Banana"," Coconut"," Date","Jujube","Guava","Grapes","Mango","Orange","Water Melon","Very Long Named Fruit"};
JList lt1 = new JList(fruit);
lt1.setForeground(Color.white);
lt1.setBackground(Color.black);
String[] country = {"Armenia","Bangladesh","China","Denmark","Egypt","France","Germany","Holland","India","Japan","Kyrgystan"," Lithuania","Mexico","North Korea","Singapore","Uruguay","Vanuatu"/*,"Very Big Named Country"*/};
JComboBox cb1 = new JComboBox(country);
cb1.setForeground(Color.yellow);
cb1.setBackground(Color.red);
cb1.setFont(ft1);
ButtonGroup bg1= new ButtonGroup();
JRadioButton rb1 = new JRadioButton(" Rose ");
rb1.setForeground(Color.cyan);
rb1.setBackground(cr1);
bg1.add(rb1);
JRadioButton rb2 = new JRadioButton(" Lily ");
rb2.setForeground(Color.cyan);
rb2.setBackground(cr1);
bg1.add(rb2);
JRadioButton rb3 = new JRadioButton(" Tulip ");
rb3.setForeground(Color.cyan);
rb3.setBackground(cr1);
bg1.add(rb3);
JRadioButton rb4 = new JRadioButton(" SunFlower ");
rb4.setForeground(Color.cyan);
rb4.setBackground(cr1);
bg1.add(rb4);
JCheckBox ch1 = new JCheckBox(" See ");
ch1.setForeground(Color.magenta);
ch1.setBackground(Color.cyan);
bg1.add(ch1);
JCheckBox ch2 = new JCheckBox(" Touch ");
ch2.setForeground(Color.magenta);
ch2.setBackground(Color.cyan);
bg1.add(ch2);
JCheckBox ch3 = new JCheckBox(" Smell ");
ch3.setForeground(Color.magenta);
ch3.setBackground(Color.cyan);
bg1.add(ch3);
east.setBounds(400,200,80,100);
pan1.add(east);
west.setBounds(20,200,80,100);
pan1.add(west);
north.setBounds(200,10,100,80);
pan1.add(north);
south.setBounds(200,510,100,80);
pan1.add(south);
lb1.setBounds(0,0,100,50);
pan1.add(lb1);
lb2.setBounds(0,80,100,50);
pan1.add(lb2);
tf1.setBounds(10,350,80,30);
pan1.add(tf1);
tf2.setBounds(10,500,80,30);
pan1.add(tf2);
ta1.setBounds(400,10,100,180);
pan1.add(ta1);
sd1.setBounds(140,120,200,50);
pan1.add(sd1);
sd2.setBounds(210,200,50,200);
pan1.add(sd2);
sd3.setBounds(140,410,200,50);
pan1.add(sd3);
lt1.setBounds(520,20,120,200);
pan1.add(lt1);
cb1.setBounds(520,310,180,50);
pan1.add(cb1);
JScrollPane sp1 = new JScrollPane(lt1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
sp1.setBounds(lt1.getX(),lt1.getY(),lt1.getWidth(),lt1.getHeight());
pan1.add(sp1);
JScrollPane sp2 = new JScrollPane(cb1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
sp2.setBounds(cb1.getX(),cb1.getY(),cb1.getWidth(),cb1.getHeight());
pan1.add(sp2);
JScrollPane sp3 = new JScrollPane(ta1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
sp3.setBounds(ta1.getX(),ta1.getY(),ta1.getWidth()+10,ta1.getHeight()+10);
pan1.add(sp3);
JScrollPane sp4 = new JScrollPane(sd3,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sp4.setBounds(sd3.getX(),sd3.getY(),sd3.getWidth(),sd3.getHeight());
pan1.add(sp4);
JScrollPane sp5 = new JScrollPane(tf1,JScrollPane.VERTICAL_SCROLLBAR_NEVER,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sp5.setBounds(tf1.getX(),tf1.getY(),tf1.getWidth()+20,tf1.getHeight()+20);//20,20 seems the ideal width and height to add
pan1.add(sp5);
//Now we try scrollpane on a panel
JScrollPane sp6 = new JScrollPane(pan1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
sp6.setBounds(pan1.getX(),pan1.getY(),pan1.getWidth()+20,pan1.getHeight()+20);
frame1.add(sp6);
JPanel pan2 = new JPanel();
pan2.setBackground(Color.red);
pan2.setBounds(680,10,120,250);
pan1.add(pan2);
pan2.setLayout(new BoxLayout(pan2,BoxLayout.Y_AXIS));
pan2.add(rb1);
pan2.add(rb2);
pan2.add(rb3);
pan2.add(rb4);
pan2.add(ch1);
pan2.add(ch2);
pan2.add(ch3);
**JButton b3 = new JButton("A Very Big Button");**
b3.setBackground(Color.white);
b3.setBounds(850,40,120,50);
pan1.add(b3);
/*
*/
frame1.setVisible(true);
}
}