标签:tla creat style 没有 赋值 vax 基本 变化 nothing
界面设计基本容器和控件用法已经大致记录完毕,现在说一说有关高分辨率屏下适应Swing的方式
一、窗口大小,字体大小等的动态调整
1、获取当前屏幕的分辨率:
//设置跟随分辨率变化窗口 Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); private int screenHeight = (int) screenSize.getHeight();//获取垂直大小 private int screenWidth = (int) screenSize.getWidth();//获取水平宽度信息 private double enlargement_x=screenWidth/1920;//水平放大倍数 private double enlargement_y=screenHeight/1080;//垂直放大倍数,用于适应不同分辨率乘以不同比例系数
2、JFrame窗口大小调整:
setSize(new Dimension(screenSize.width,screenSize.height));
或者
setSize(new Dimension(screenSize.width,screenSize.height));//前两个参数是左上角位置,后两个是大小
3、相应的只要涉及绝对大小的都要乘以(1)中定义的放大倍数,比如
setBounds(100,100,(int)( 1800*enlargement_x), (int)(1600*enlargement_y));//设置窗口大小
又如:
BookTypeDescTxt.setFont(new Font("宋体", Font.PLAIN, 35*enlargement_x));//字体大小设置
等等,大致方法如此。
二、JFrame窗口居中:
windowWidth = this.getWidth(); //获得当前窗口宽
windowHeight = this.getHeight(); //获得当前窗口高 this.setLocation(screenWidth / 2 - windowWidth / 2, screenHeight / 2 - windowHeight / 2);//设置窗口居中显示
三、关于JInternalFrame
由于这个内部窗口栏的标题栏不知道怎么改变大小,弃置不用,改用JFrame,这样就出现一个问题。如果关闭一个窗口就全部关闭了。采用如下方式:
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
表示静止关闭按钮。
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//释放当前窗口,不会关闭所有窗口
注:EXIT_ON_CLOSE是默认选项,按下关闭后执行
System.exit(0);//关闭所有窗口
四、通知窗口的设计:
同样Swing中的
JOptionPane.showMessageDialog(null, "用户名不能为空","Attention", JOptionPane.INFORMATION_MESSAGE);
这一类通知窗口也不能用。太过封装的东西就是这一点不好,不好根据自己的需求改。我只好自己写了几个类
1、出现一段时间自动消失的消息提醒:
具体实现如下:
public class showMessageFrame extends javax.swing.JFrame { /** * 定义样式选择常量 */ public static final int NORMAL=0; public static final int NOTE=1; //获取当前屏幕分辨率 Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screensize = tk.getScreenSize(); int height = (int)screensize.getHeight(); int width = (int)screensize.getWidth(); private double enlargement_x=width/1920; private double enlargement_y=height/1080; //提示的消息内容 private String str = null; private JLabel text; public showMessageFrame(Component c,String str,int color) { this.str = str; new Thread(new Runnable() { @Override public void run() { initGUI(c,color); } }).start(); } //绘制简易窗口 private void initGUI(Component c,int color) { try { setUndecorated(true); setLocationRelativeTo(c);//设置窗口相对于指定组件的位置 setVisible(true); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); { text = new JLabel("<html>" + str + "</html>", SwingConstants.CENTER); text.setFont(new Font("宋体",Font.BOLD, (int)(40*enlargement_x))); getContentPane().add(text, BorderLayout.CENTER); text.setBackground(new java.awt.Color(255, 251, 240)); //这里只设置了两种颜色式样,还可以设置更多 switch(color) { case NORMAL: break; case NOTE: getContentPane().setBackground(Color.YELLOW);break; } } //自动调整窗口大小 pack(); //延时 try { Thread.sleep(3000);//运行3000ms } catch (InterruptedException e1) { e1.printStackTrace(); } dispose();//释放由此 Window、其子组件及其拥有的所有子组件所使用的所有本机屏幕资源 } catch (Exception e) { e.printStackTrace(); } } }
使用时候如下:
showMessageFrame note=new showMessageFrame(null,"\n密码不能为空\n",showMessageFrame.NOTE);
2、一般的提示窗口:
public class Dialogutil extends JDialog implements ActionListener{ //获取分辨率 Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screensize = tk.getScreenSize(); int height = (int)screensize.getHeight(); int width = (int)screensize.getWidth(); private double enlargement_x=width/1920; private double enlargement_y=height/1080; private JTextField MassageTXt; private JButton confirmJb = new JButton(); /** * 构造函数,第一个参数为父窗体,第二个参数为对话框标题,第三个参数为所显示的信息 */ public Dialogutil(JFrame prentFrame, String title,String inform) { // // 调用父类的构造函数, super(prentFrame, title, false); int Txtsize=inform.length(); setTitle(title); //建立中间容器 JPanel contentPane = new JPanel(); setContentPane(contentPane); //放置相应的控件 MassageTXt = new JTextField(); MassageTXt.setEditable(false); MassageTXt.setBackground(UIManager.getColor("menu")); MassageTXt.setFont(new Font("华文行楷", Font.PLAIN, 35)); MassageTXt.setText(inform);//具体内容参数传递 MassageTXt.setColumns(10); confirmJb = new JButton("\u786E\u8BA4"); confirmJb.addActionListener(this); confirmJb.setFont(new Font("宋体", Font.PLAIN, 35)); GroupLayout gl_contentPane = new GroupLayout(contentPane); gl_contentPane.setHorizontalGroup( gl_contentPane.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup() .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup() .addGap(123) .addComponent(MassageTXt, GroupLayout.PREFERRED_SIZE,(int)(Txtsize*35*enlargement_x), GroupLayout.PREFERRED_SIZE)) .addGroup(gl_contentPane.createSequentialGroup() .addGap(123+(int)(Txtsize/2.7*35*enlargement_x))//置于中间 .addComponent(confirmJb))) .addContainerGap(123, Short.MAX_VALUE)) ); gl_contentPane.setVerticalGroup( gl_contentPane.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup() .addGap(55) .addComponent(MassageTXt, GroupLayout.PREFERRED_SIZE, 65, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED, 35, Short.MAX_VALUE) .addComponent(confirmJb) .addContainerGap()) ); //MassageTXt.setBorder(new LineBorder(new Color(127, 157, 185))); MassageTXt.setBorder(new EmptyBorder(0,0,0,0)); contentPane.setLayout(gl_contentPane); setBounds((int)(width / 2-180* enlargement_x),height/2,558,318); // 调整对话框布局大小 pack(); setVisible(true); } /** * 确定按钮事件处理 */ @Override public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if ((source == confirmJb)) { setVisible(false); dispose(); return; } } }
使用方法如下:
Dialogutil attention=new Dialogutil(null,"Attention!","用户信息获取失败!");
3、确认窗口
这个最麻烦,需要将确认消息状态返回(确认还是取消)。由于主界面是一次生成的,不能在打开窗口后立刻赋值,那样主界面中得到的就是初始值。所以必须要开一个线程,等待放回参数。没有想到什么好方法,只能用比较笨的方法。
生成窗口:
public class ShowConfirmDialog extends JDialog implements ActionListener { //获取分辨率 Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screensize = tk.getScreenSize(); int height = (int)screensize.getHeight(); int width = (int)screensize.getWidth(); private double enlargement_x=width/1920; private double enlargement_y=height/1080; JButton setButton; //确定 JButton denyButton;//否定 JButton cancelButton;//取消 private int result;//返回按什么按钮:是-0;否-1;取消-2 ShowConfirmDialog() { result=-1; } /** * 确认框 * @param prentFrame 父类容器 * @param title 标题 * @param inform 提示信息 */ public ShowConfirmDialog(JFrame prentFrame,String title , String inform) { // 调用父类的构造函数, super(prentFrame, title, false); // 第三个参数用false表示允许激活其他窗体。为true表示不能够激活其他窗体 result=-1;//一定要赋初值以示区分 //开启一个线程 new Thread(new Runnable(){ @Override public void run() { // synchronized(this) // { initGUI(inform); // } } }).start(); } //窗口界面设置 private void initGUI(String inform) { //建立中间容器 JPanel contentPane = new JPanel(); setContentPane(contentPane); contentPane.setLayout(new BorderLayout());//主容器用borderlayout // 添加Label和输入文本框 JPanel p1 = new JPanel(); p1.setLayout(new FlowLayout(FlowLayout.CENTER)); contentPane.add(p1, "Center"); JLabel label = new JLabel(inform); label.setFont(new Font("宋体", Font.PLAIN, 35)); setBounds((int)(width / 2-180* enlargement_x),height/2, (int)(640*enlargement_x),(int)(320*enlargement_y)); p1.add(label); //添加按钮 JPanel p2 = new JPanel(); p2.setLayout(new FlowLayout(FlowLayout.CENTER)); contentPane.add(p2, "South"); setButton = new JButton("确 定"); setButton.setFont( new Font("宋体", Font.PLAIN,(int)(20*enlargement_x)) ); setButton.setPreferredSize(new Dimension((int)(85*enlargement_x),(int)(40*enlargement_y))); p2.add(setButton); denyButton = new JButton("否定"); denyButton.setFont( new Font("宋体", Font.PLAIN,(int)(20*enlargement_x)) ); denyButton.setPreferredSize(new Dimension((int)(85*enlargement_x),(int)(40*enlargement_y))); p2.add(denyButton); cancelButton = new JButton("取消"); cancelButton.setFont( new Font("宋体", Font.PLAIN,(int)(20*enlargement_x)) ); cancelButton.setPreferredSize(new Dimension((int)(85*enlargement_x),(int)(40*enlargement_y))); p2.add(cancelButton); // 调整对话框布局大小 pack(); setVisible(true); setButton.addActionListener(this);//关联动作 denyButton.addActionListener(this);//关联动作 cancelButton.addActionListener(this);//关联动作 } /** * 事件处理 */ @Override public void actionPerformed(ActionEvent event) { Object source = event.getSource(); if ((source == setButton)) { this.result=0;//确定返回0 dispose(); return; } else if(source==denyButton) { this.result=1;//否返回1 dispose(); return; } else { this.result=2;//取消返回2 dispose(); return; } }
调用时候开一个线程,等待返回参数:
ShowConfirmDialog confrm=new ShowConfirmDialog(null,"提示","是否退出系统"); new Thread( new Runnable() { @Override public void run(){ do { try { Thread.sleep(10);//等待,直到按钮被按下 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }while(confrm.getResult()==-1); if(confrm.getResult()==0) { //确认按钮按下,该干啥干啥 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }).start();
五、一些边框调整:
// 设置文本域边框 BookDescTxt.setBorder(new LineBorder(new Color(127, 157, 185)));
带标题的Jpanel标题的子体设置
//修改表头大小和字体大小 BookSearchJT.getTableHeader().setPreferredSize(new Dimension((int)(1*enlargement_x),(int)(40*enlargement_y)));//标题栏大小 BookSearchJT.getTableHeader().setFont(new Font("宋体", Font.PLAIN, (int)(35*enlargement_y)));//字体大小 BookSearchJT.setRowHeight((int)(80*enlargement_y));
然后各大控件基本都有setFont(new Font("宋体", Font.PLAIN, 35));方法设置字体大小。
标签:tla creat style 没有 赋值 vax 基本 变化 nothing
原文地址:http://www.cnblogs.com/satire/p/6848977.html