我想知道如何用java swing设计我想要的这样的一个界面?望抽空帮助,万分感谢!

1、点击“模块一”则下方显示“选项一”、“选项二”、“选项三”及右边内容,右边默认显示选项一对应的内容;同理,点击“模块二”则下方显示“选项四”、“选项五”、“选项六”及... 1、点击“模块一”则下方显示“选项一”、“选项二”、“选项三”及右边内容,右边默认显示选项一对应的内容;同理,点击“模块二”则下方显示“选项四”、“选项五”、“选项六”及右边内容……共三个模块,每个模块对应三个选项,右边的内容可实现九种切换。2、几个选项可以用JLabel设置吗,这样显得不突兀,只要鼠标放上去显示 手型 图标 可点击 即可3、点击每一个选项时,对应的部分产生相应的阴影或色彩,这应该怎么设计呢?求设计思路及完整代码 展开
 我来答
雪飞潇潇
2017-07-31 · TA获得超过6275个赞
知道大有可为答主
回答量:1968
采纳率:91%
帮助的人:879万
展开全部

效果图

思路:

JTabbedPane  提供了一个setUI方法,来修改JTabbedPane 的界面和外观

然后我们可以继承BasicTabbedPaneUI 重写里面的部分绘制方法来修改外观

参考代码

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicTabbedPaneUI;

public class SwingDemo extends JFrame implements ActionListener {
JButton jb;
JPanel jp3;

public SwingDemo() {
JTabbedPane jtpTotal = new JTabbedPane();//横向的JTabbedPane ,模块一,模块二...

JTabbedPane jtpa = new JTabbedPane();//模块一,对应的是jtpa
jtpa.setTabPlacement(JTabbedPane.LEFT);//设置标签在纵向
JPanel jp1 = new JPanel(new BorderLayout());//新建一个JPanel,布局为边界布局
JTextArea jta = new JTextArea();//文本域
jta.append("人生若只如初见,何事秋风悲画扇.");//文本域的内容
jta.setFont(new Font("宋体",Font.BOLD, 25));//文本域的文字
jp1.add(jta);
JPanel jp2 = new JPanel();
JLabel jl = new JLabel("PI=3.1415926");
jl.setFont(new Font("隶书",Font.BOLD, 20));
jl.setForeground(Color.RED);//设置jl的文字颜色
jp2.add(jl);
//为了方便响应事件,把jb,和jp3的定义放到了顶上
jp3 = new JPanel();
jb = new JButton("点击按钮修改本页的背景色");
jb.addActionListener(this);//添加事件响应
jp3.add(jb);
jtpa.add("选项一", jp1);
jtpa.add("选项二", jp2);
jtpa.add("选项三", jp3);
JPanel jpA = new JPanel(new BorderLayout());
jpA.add(jtpa);
//把jtpa的所有选项的标签的背景色设置为白色
for (int i = 0; i < jtpa.getTabCount(); i++) {
jtpa.setBackgroundAt(i, Color.WHITE);
}
jtpa.setUI(new TPUI());
jtpTotal.add("模块一", jpA);


//下面的jtpb和jtpc没有添加组件,也没有设置颜色, 但是结构看起来比较直观
JTabbedPane jtpb = new JTabbedPane();
jtpb.setTabPlacement(JTabbedPane.LEFT);
JPanel jp4 = new JPanel();
JPanel jp5 = new JPanel();
JPanel jp6 = new JPanel();
jtpb.add("选项四", jp4);
jtpb.add("选项五", jp5);
jtpb.add("选项六", jp6);
JPanel jpB = new JPanel(new BorderLayout());
jpB.add(jtpb);
jtpTotal.add("模块二", jpB);

JTabbedPane jtpc = new JTabbedPane();
jtpc.setTabPlacement(JTabbedPane.LEFT);
JPanel jp7 = new JPanel();
JPanel jp8 = new JPanel();
JPanel jp9 = new JPanel();
jtpc.add("选项七", jp7);
jtpc.add("选项八", jp8);
jtpc.add("选项九", jp9);
JPanel jpC = new JPanel(new BorderLayout());
jpC.add(jtpc);
jtpTotal.add("模块三", jpC);

add(jtpTotal);

setTitle("主窗口");// 标题
setSize(620, 480);// 大小
setLocationRelativeTo(null);// 居中
setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭窗口后退出程序
setVisible(true);// 窗口可见
}

public static void main(String[] args) {
new SwingDemo();
}

@Override
public void actionPerformed(ActionEvent e) {//点击修改jp3的颜色
if(e.getSource()==jb){//如果是jb按钮被点击
jp3.setBackground(new Color(getInt(),getInt(),getInt()));//那么修改jp3的背景色
}
}
public int getInt(){//随机产生0~255之间的数字,用于生成随机颜色r,g,b
return (int) (Math.random()*256);
}

}

//注意,此类用于修改外观JTabbedPane
class TPUI extends BasicTabbedPaneUI {
public static ComponentUI createUI(JComponent c) {
return new TPUI();
}


@Override
protected void paintTabBorder(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h,
boolean isSelected) {
if (isSelected) {//如果该标签被选中, 那么绘制矩形
g.setColor(new Color(116, 168, 231));
g.fillRect(x + w - 10, y, x+w, h);
}else{//没有被选中时的边框, 也可以不用绘制
g.setColor(new Color(116, 168, 231));
g.drawRect(x + w - 8, y, x+w, h);
}
}

@Override
protected void paintTabBackground(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h,
boolean isSelected) {
g.setColor(Color.RED);
super.paintTabBackground(g, tabPlacement, tabIndex, x, y, w, h, false);
// 最后一个参数 true绘制背景色.false不绘制
// 如果参数是isSelected ,那么选中就绘制背景色,不选中就不绘制

}
}
来自:求助得到的回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式