我想要两个不同类的两个图像,它们将JPanel并排延伸。
我遇到的问题是两个JPanel应该在JFrame中,但是当我执行framename.add(panel)时,它会替换另一个,而不是并排添加其中两个。
我尝试在主类中添加flowlayout和其他布局,但没有出现任何图像。
所以我的问题是,如果我有两个扩展Jpanel的类,我如何在Jframe中添加这两个面板,以便它们可以并排(彼此相邻)替换其他小组?
任何建议都将不胜感激。
编辑:如果我将JFrame扩展到某个类,该类是否会自动成为JPanel?我知道扩展意味着什么,但我不确定它在Jframe方面是如何工作的。
Main.java
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class Main
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
Panel1 s = new Panel1(); //picture 1
Panel2 n = new Panel2(); //picture 2
frame.add(n);
frame.add(s); //here is the problem, it replaces the previous panel
f.setSize(200,100);
f.setLocation(0,400);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Panel1.java
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class image2 extends JPanel
{
ImageIcon anotherIcon;
public image2() //constructor
{
URL imageURL = Panel1.class.getResource("images/puppy.png");
anotherIcon = new ImageIcon(imageURL);
}
public void paint(Graphics g)
{
super.paintComponent(g);
anotherIcon.paintIcon(this, g, 0, 0);
}
}
Panel2.java
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class Panel2 extends JPanel
{
ImageIcon anotherIcon2;
public Panel2() //constructor
{
URL imageURL = Panel2.class.getResource("images/puppy2.png");
anotherIcon = new ImageIcon(imageURL);
}
public void paint(Graphics g)
{
super.paintComponent(g);
anotherIcon2.paintIcon(this, g, 0, 0);
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
JFrame的默认布局管理器是BorderLayout。尝试将其更改为使用类似GridLayout的内容
请查看A visual guide to layout managers了解更多提示
答案 2 :(得分:0)
试试frame.getContentPane().add(...)
?
将内容窗格的布局设置为FlowLayout(或其他)
JFrame f = new JFrame("This is a test");
f.setSize(400, 150);
Container content = f.getContentPane();
content.setLayout(new FlowLayout());
content.add(new JButton("Button 1"));
content.add(new JButton("Button 2"));
f.setVisible(true);
答案 3 :(得分:0)
您要将面板直接添加到JFrame,您必须在contentPane中添加面板。
还推荐创建一个面板作为contentPane frame.setContentPane(myPanel);
并使用一些布局(BorderLayout,GridBagLayout,无论......)配置它。
答案 4 :(得分:0)
在框架集FlowLayout()
中frame.setLayout(new FlowLayout());
答案 5 :(得分:0)
我更正了Panel1.java和Panel2.java的小错误,并添加了一个示例,说明如何使用GridBagLayout
/ GridBagConstraints
组合将它们并排放置:
Main.java
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class Main {
public static void main(String[] args) {
GridBagConstraints gbc = new GridBagConstraints();
JFrame frame = new JFrame();
frame.setLayout(new GridBagLayout());
Panel1 s = new Panel1(); //picture 1
Panel2 n = new Panel2(); //picture 2
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.fill = GridBagConstraints.BOTH;
frame.add(n, gbc);
gbc.gridx = 1;
gbc.gridy = 0;
gbc.gridwidth = GridBagConstraints.REMAINDER;
frame.add(s, gbc); //here is the problem, it replaces the previous panel
frame.setSize(200,100);
frame.setLocation(0,400);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Panel1.java
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class Panel1 extends JPanel {
ImageIcon anotherIcon;
public Panel1 ( ) {
URL imageURL = Panel1.class.getResource("images/puppy.png");
anotherIcon = new ImageIcon(imageURL);
}
public void paint(Graphics g) {
super.paintComponent(g);
anotherIcon.paintIcon(this, g, 0, 0);
}
}
Panel2.java
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class Panel2 extends JPanel {
ImageIcon anotherIcon;
public Panel2 ( ) {
URL imageURL = Panel2.class.getResource("images/puppy2.png");
anotherIcon = new ImageIcon(imageURL);
}
public void paint(Graphics g) {
super.paintComponent(g);
anotherIcon.paintIcon(this, g, 0, 0);
}
}
您的代码的一般想法并没有错,只是将面板放在另一个上面,导致一个隐藏另一个....
答案 6 :(得分:0)
你可以试试这个。将框架的布局设置为: 的 setLayout的(空)强> 然后可以添加Bounds到您的面板 即。的的setBounds()强> 然后将这些面板添加到框架