Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Rounded Borders 
V
    Опции темы
PashaOvechkin
Дата 5.5.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



Привет! 

Как можно закруглить углы в у бордера для JPanel? 
И при етом поместить заголовок бордера в по средине по оси х?
Пример правильного и не правильного бордера можно видеть в приложении...
Так же нужно закруглить углы у JButton... 

Ети проблемы частично решает LineBorder 
http://www.java2s.com/Code/Java/Swing-JFC/LineBorderDemo.htm  но не до конца. Как сильно закруглить углы нелзя указать.
Да и заголовок етому бордеру не указать.

Спасибо!



Это сообщение отредактировал(а) PashaOvechkin - 5.5.2008, 18:36

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  panels.JPG 31,09 Kb
PM MAIL Skype   Вверх
PashaOvechkin
Дата 6.5.2008, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



Проблему решил так : 

Код


package test;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;

import java.awt.RenderingHints;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
 
public class RoundedBorderTest {
    RoundedBorderTest() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();
        p.setBorder(new RoundedBorder(50));
        p.add(new JLabel(""));
        p.add(new JButton("aaa"));
        p.add(new JButton("bbb"));
        f.add(p);
//        f.add(new JButton("NORTH"), BorderLayout.NORTH);
//        f.add(new JButton("SOUTH"), BorderLayout.SOUTH);
//        f.add(new JButton("EAST"), BorderLayout.EAST);
//        f.add(new JButton("WEST"), BorderLayout.WEST);
        f.setSize(400,300);
        f.setVisible(true);
    }
    public static void main(String[] args) {
        new RoundedBorderTest();
    }
    
    private static class RoundedBorder implements Border {
        
        private int radius;
        
        RoundedBorder(int radius) {
            this.radius = radius;
        }
        //@Override
        public Insets getBorderInsets(Component c) {
            return new Insets(this.radius+1, this.radius+1, this.radius+2, this.radius);
        }
 
        //@Override
        public boolean isBorderOpaque() {
            return true;
        }
 
        //@Override
        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
            ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            g.drawRoundRect(x,y,width-1,height-1,radius,radius);
        }
    }
}



Но опять вопрос - как можно к такому бордеру добавить хедер? (что то типо : setTitledBoreder(...) )
PM MAIL Skype   Вверх
PashaOvechkin
Дата 6.5.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 394
Регистрация: 1.4.2007
Где: Riga, Latvia

Репутация: 1
Всего: 4



Решено!
Если кому интересно -> 

Код


package test;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;

import java.awt.RenderingHints;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.Border;
 
public class RoundedBorderTest {
    
    public static final Font MY_FONT = new Font("Lucida Sans Typewriter", Font.CENTER_BASELINE, 11);
    
    RoundedBorderTest() {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();
        p.add(new JLabel(""));
        p.add(new JLabel("MyBorder"));
        p.setPreferredSize(new Dimension(200,266));
        
        f.add(p);
        
        f.pack();
        f.setVisible(true);
        p.setBorder(new RoundedBorder(50, p, "YEEEEE!"));
    }
    public static void main(String[] args) {
        new RoundedBorderTest();
    }
    
    private static class RoundedBorder implements Border {
        
        private int radius;
        private JPanel parent;
        private String headerText;
         
        RoundedBorder(int radius, JPanel parent, String headerText) {
            this.radius = radius;
            this.parent = parent;
            this.headerText = headerText;
        }
        //@Override
        public Insets getBorderInsets(Component c) {
            return new Insets(this.radius+1, this.radius+1, this.radius+2, this.radius);
        }
 
        //@Override
        public boolean isBorderOpaque() {
            return true;
        }
 
        //@Override
        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
            ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
            
            final FontMetrics barFontMetrics = g.getFontMetrics(MY_FONT);
            int fontBaseLine = barFontMetrics.getHeight() - 2;
            
            Color bgColor = parent.getBackground();
            
            g.setColor(Color.GRAY);
            g.drawRoundRect(x +5, y +5, width-1-10, height-1-10, radius,radius);
            
            g.setColor( bgColor );
            g.fillRect( width/2 - barFontMetrics.stringWidth(headerText)/2 - 3, fontBaseLine - 10, barFontMetrics.stringWidth(headerText)+6 , 20 );
            
            g.setColor(Color.black);
            g.drawString(headerText, width/2 - barFontMetrics.stringWidth(headerText)/2, fontBaseLine);
            
        }
    }
}


Это сообщение отредактировал(а) PashaOvechkin - 6.5.2008, 17:33
PM MAIL Skype   Вверх
virtul
Дата 6.5.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



eeeeeeeeeeeeeeeeee
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.