为什么JTextArea
没有显示在GUI
?
public class AddMovie extends JTextField {
static JFrame frame;
private JLabel description;
JTextArea movieDescription;
public JPanel createContentPane() throws IOException
{
JPanel totalGUI = new JPanel();
totalGUI.setLayout(null);
totalGUI.setBackground(Color.WHITE);
description = new JLabel("Description ");
description.setLocation(15,285);
description.setSize(120, 25);
description.setFont(new java.awt.Font("Tahoma", 0, 12));
movieDescription=new JTextArea();
movieDescription.setLocation(15,320);
movieDescription.setSize(420, 110);
JScrollPane scrollPane = new JScrollPane(movieDescription);
totalGUI.add(description);
totalGUI.add(movieDescription);
totalGUI.add(cancel);
totalGUI.add(scrollPane);
return totalGUI;
}
static void createAndShowGUI() throws IOException
{
JFrame.setDefaultLookAndFeelDecorated(true);
frame = new JFrame("New Movie");
//Create and set up the content pane.
AddMovie demo = new AddMovie();
frame.setContentPane(demo.createContentPane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(515, 520);
frame.setLocation(480,120);
frame.setVisible(true);
}
public void setVisible(boolean b) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:4)
根据建议here和here,null
布局会带来麻烦。由于您的显示中心位于描述中,因此请使用JTextArea
构造函数来指定行和列的大小。当您pack()
封闭Window
时,它会调整大小以适合文本区域。我已添加了一些 ad hoc 文字来说明效果。我还要updated代码,以便在调整框架大小时允许文本区域增长。
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
* @see https://stackoverflow.com/a/38282886/230513
*/
public class Test {
private JPanel createPanel() {
JPanel panel = new JPanel(new GridLayout());
//panel.setBorder(BorderFactory.createTitledBorder("Description"));
JTextArea movieDescription = new JTextArea(10, 20);
panel.add(new JScrollPane(movieDescription));
movieDescription.setLineWrap(true);
movieDescription.setWrapStyleWord(true);
movieDescription.setText(movieDescription.toString());
return panel;
}
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(createPanel());
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Test()::display);
}
}
答案 1 :(得分:3)
totalGUI.setLayout(null);
您应该解决的第一个问题是:Java GUI必须使用不同语言环境中的不同PLAF,在不同的操作系统,屏幕大小,屏幕分辨率等上工作。因此,它们不利于像素完美布局。而是使用布局管理器,或combinations of them以及white space的布局填充和边框。
除了许多其他问题之外,它通常还会破坏滚动窗格执行其设计工作的能力。
cancel
的属性。 setVisible(boolean)
这样的方法,然后将它们留空!这只不过是打破功能正常的功能! movieDescription
和totalGUI
都添加了Tahoma
滚动窗格。它应该只添加到滚动窗格。 JLabel
字体仅在某些操作系统<&#39; TitledBorder
,而不是使用throws IOException
作为说明。 df.to_hdf('name_of_file_to_save', 'key_1',table=True)
df.to_hdf('name_of_file_to_save', 'key_2', table=True) # saved to the same h5 file as above
的两个方法中没有任何内容实际上可以导致一个。{li> 答案 2 :(得分:-1)
在createAndShowGUI
方法中,您再次创建 AddMovie 对象..
所以,如果你修改了如下的尾声,那就可以了......
public class AddMovie extends JTextField {
private static final long serialVersionUID = 6180900736631578119L;
private JFrame frame;
private JLabel description;
private JTextArea movieDescription;
public JPanel createContentPane() {
JPanel totalGUI = new JPanel();
totalGUI.setBackground(Color.WHITE);
description = new JLabel("Description ");
description.setLocation(15, 285);
description.setSize(120, 25);
description.setFont(new java.awt.Font("Tahoma", 0, 12));
movieDescription = new JTextArea();
movieDescription.setLocation(15, 320);
movieDescription.setSize(420, 110);
JScrollPane scrollPane = new JScrollPane(movieDescription);
totalGUI.add(description);
totalGUI.add(movieDescription);
totalGUI.add(scrollPane);
return totalGUI;
}
public void createAndShowGUI() {
JFrame.setDefaultLookAndFeelDecorated(true);
frame = new JFrame("New Movie");
frame.setContentPane(createContentPane());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(515, 520);
frame.setLocation(480, 120);
frame.setVisible(true);
}
public static void main(String[] args) {
AddMovie am = new AddMovie();
am.createAndShowGUI();
}
}