我有一个JScrollPane。 但默认情况下它显示JTextArea。
JTextArea jTextArea = new JTextArea();
JScrollPane pane = new JScrollPane(jTextArea);
所以这里一切都很好。但现在我想通过用户操作更改JScrollPane组件:
pane.remove(jTextArea);
pane.add(new JTable(data[][], columns[]));
pane.revalidate();
frame.repaint();
我的主窗口中的帧。使用GridBagLayout将JScrollPane添加到主窗口。 但这不起作用。运行后,JScrollPane变为灰色。
答案 0 :(得分:4)
jScrollPane.getViewport().remove/add
答案 1 :(得分:3)
另一种方法是将JPanel
CardLayout
1 放入JScrollPane
,将两个组件添加到面板中,然后简单地在文本区域和表格。
鉴于组件的大小可能大不相同,最好这样做:
带有JPanel
的 CardLayout
包含许多 JScrollPane
个实例,每个实例都包含一个组件。对JTable
来说,这也会更好地发挥作用。
答案 2 :(得分:2)
在收到陛下@camickr提出的一个有价值的建议后编辑了我的答案,setViewportView(componentObject);
习惯于这样做。
帮助您解决问题的示例代码:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ScrollPaneExample extends JFrame
{
private JPanel panel;
private JScrollPane scrollPane;
private JTextArea tarea;
private JTextPane tpane;
private JButton button;
private int count;
public ScrollPaneExample()
{
count = 0;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationByPlatform(true);
panel = new JPanel();
panel.setLayout(new BorderLayout());
tarea = new JTextArea();
tarea.setBackground(Color.BLUE);
tarea.setForeground(Color.WHITE);
tarea.setText("TextArea is working");
scrollPane = new JScrollPane(tarea);
tpane = new JTextPane();
tpane.setText("TextPane is working.");
button = new JButton("Click me to CHANGE COMPONENTS");
button.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
if (count == 0)
{
scrollPane.setViewportView(tpane);
count++;
}
else if (count == 1)
{
scrollPane.setViewportView(tarea);
count--;
}
}
});
setContentPane(panel);
panel.add(scrollPane, BorderLayout.CENTER);
panel.add(button, BorderLayout.PAGE_END);
pack();
setVisible(true);
}
public static void main(String... args)
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new ScrollPaneExample();
}
});
}
}
希望这可能会对你有所帮助。
此致