我有一个JFrame。我使用了:
我的问题是,每当我使用Nimbus look and feel时,只有在添加了背景图像时,JButton才会消失。但这不会发生在其他外观上。有人能帮我把按钮弄清楚吗?
以下是我的代码:
import javax.swing.ImageIcon;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager.LookAndFeelInfo;
import java.awt.*;
import java.awt.event.*;
class ImageTest
{
JTabbedPane tp;
JLabel lab1;
JPanel welcome;
JFrame frame;
ImageIcon image2;
JButton b1;
public void createUI()
{
frame=new JFrame("JTabbedPane Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b1=new JButton();
welcome= new JPanel(null);
welcome.setPreferredSize(new Dimension(1366,786));
ImageIcon icon = new ImageIcon(ImageTest.class.getResource("icloud.jpg"));
tp=new JTabbedPane();
Container pane = frame.getContentPane();
pane.add(tp);
tp.addTab("Welcome", welcome);
lab1=new JLabel();
lab1.setIcon(icon);
b1.setBounds(100,100,100,100);
lab1.setBounds(0,0,1500,700);
welcome.add(lab1);
welcome.add(b1);
b1.setVisible(true);
frame.setSize(500,500);
frame.setVisible(true);
frame.setTitle("I-Cloud");
}
public static void main(String[] args)
{
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
}
ImageTest w = new ImageTest();
w.createUI();
}
}
编辑:
import javax.swing.ImageIcon;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.UIManager.LookAndFeelInfo;
import java.awt.*;
import java.awt.event.*;
class ImageTest
{
JTabbedPane tp;
JLabel lab1;
JPanel welcome,w;
JFrame frame;
ImageIcon image2;
JButton b1;
public void createUI()
{
frame=new JFrame("JTabbedPane Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
b1=new JButton();
welcome= new JPanel(new GridLayout(1,1,15,15));
w=new JPanel (new GridLayout(1, 1, 15, 15));
welcome.setPreferredSize(new Dimension(1366,786));
ImageIcon icon = new ImageIcon(ImageTest.class.getResource("icloud.jpg"));
tp=new JTabbedPane();
Container pane = frame.getContentPane();
pane.add(tp);
lab1=new JLabel();
lab1.setIcon(icon);
w.setOpaque(false);
w.add(b1);
b1.setVisible(true);
welcome.add(lab1);
welcome.add(w);
tp.addTab("Welcome", welcome);
frame.setSize(500,500);
frame.pack();
frame.setVisible(true);
frame.setTitle("I-Cloud");
}
public static void main(String[] args)
{
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
}
ImageTest w = new ImageTest();
w.createUI();
}
}
谢谢。
我认为在JLabel中设置一个背景图片,然后在添加容器后再添加按钮是一个非常复杂的问题。相信我尝试过,这是一个非常复杂的任务。你可以像气垫船建议的那样直接画图,但是记住用那种方法你不会得到很好的图像质量。:-|
通过使用空布局,然后在另一个组件上添加一个组件,基本上用另一个(带有图像的JLabel)覆盖了一个组件(JButton),您对Swing GUI的使用失去了平衡。
编辑
您的最新编辑没有像上面建议的那样使用JLabel作为容器。因此,如果您使用单独的容器,则按钮和标签将并排显示。要解决这个问题,您需要为JLabel提供一个布局管理器,然后按照上面的建议将按钮添加到其中,或者直接在JPanel的(...)
方法中绘制,并将按钮添加到JPanel。
后者的一个例子:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.UIManager.LookAndFeelInfo;
public class MyImageTest extends JPanel {
// public static final String SPEC = "https://duke.kenai.com/SunRIP/.Midsize/SunRIP.jpg.png";
public static final String SPEC = "http://upload.wikimedia.org/wikipedia/commons/3/37/"
+ "Mandel_zoom_14_satellite_julia_island.jpg";
private static final int PREF_H = 786;
private static final int GAP = 100;
private BufferedImage img;
public MyImageTest() {
try {
URL imgUrl = new URL(SPEC);
img = ImageIO.read(imgUrl);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
setLayout(new FlowLayout(FlowLayout.LEADING));
setBorder(BorderFactory.createEmptyBorder(GAP, GAP, GAP, GAP));
JButton b = new JButton();
b.setPreferredSize(new Dimension(GAP, GAP));
add(b);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (img != null) {
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
}
}
@Override
public Dimension getPreferredSize() {
if (img == null) {
return super.getPreferredSize();
} else {
int width = (img.getWidth() * PREF_H) / img.getHeight();
return new Dimension(width, PREF_H);
// return new Dimension(img.getWidth(), img.getHeight());
}
}
private static void createAndShowGui() {
try {
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
MyImageTest mainPanel = new MyImageTest();
JFrame frame = new JFrame("MyImageTest");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
在Java Swing应用程序中,我正在尝试nimbus外观。它在JdesktopPane控件中看起来非常棒,但我希望我的所有桌面都有不同的颜色,但主题很好。 有没有办法改变灵气观感的背景颜色? 下面是应用nimbus外观的示例代码。
问题内容: 我想为应用程序中的所有JPanel使用不同的背景色。使用Nimbus外观时该如何做? 我遵循“ 更改颜色主题”来更改Nimbus外观中的组件的颜色。 它有时只是 随机地 起作用。如果在更改颜色之前设置,则仅通知 一次 。 这是一些测试代码: 问题答案:
问题内容: 我学习Java已有几周了,在将背景图像应用于JFrame时,我真的很困惑。我遇到的每个教程都不像我那样创建Frames(我扩展了JFrame),或者如果这样做,说明还不够清楚,我无法理解。 下面的代码来自我自己的项目,因此可以帮助我练习到目前为止所学的内容。请您能否以下面的代码为基础,并向我说明要添加的内容和位置,所以我可能以图像作为框架的背景? 我真正要感谢的一件事是,如果您能解释事
问题内容: 可以说我创建了一个带有jbutton的2d瓦片地图,然后在地图顶部创建了单位,当单位(也是jbutton)位于瓦片顶部时,有一种方法可以显示地图背景,因为现在单元的背景只是被涂成红色,是否可以通过jbuttons而不是jbuttons来做到这一点? 问题答案: 可能,是的,建议这样做,嗯,可能不是。 我相信您将需要将标题按钮的布局更改为可以控制的内容(这将取决于您的视觉要求)。 我个人
问题内容: 我正在尝试使用在photoshop中制作的图像作为GUI的背景。我怎么做?我也做了一些我想在执行操作后显示在按钮背景中的图像… 问题答案: 对于JButton,请使用以下命令: 小组更加有趣。不过,这是一个好方法: